package com.javasm.sys;

import com.fasterxml.jackson.annotation.JsonIgnore;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class LoginUser implements UserDetails {

    private SysUser user;//对应的用户对象
    private String uuid;//本次登录唯一标识
    private Long loginTime;//登录时间
    private Long expireTime;//过期时间
    private String os;//操作系统
    private String ip;//登录ip
    private String browser;//浏览器客户端
    private List<String> menuPremit;
    private List<GrantedAuthority> premissions=new ArrayList<>();

    public LoginUser(){}

    public LoginUser(SysUser user, List<String> menuPremit) {
        this.user = user;
        this.menuPremit=menuPremit;

        for (String premission : menuPremit) {
            premissions.add(new SimpleGrantedAuthority(premission));
        }
    }

    //权限列表
    @JsonIgnore
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return premissions;
    }

    @JsonIgnore
    @Override
    public String getPassword() {
        return user.getUserPassword();
    }
    @JsonIgnore
    @Override
    public String getUsername() {
        return user.getUserName();
    }

    public List<String> getMenuPremit() {
        return menuPremit;
    }

    public void setMenuPremit(List<String> menuPremit) {
        this.menuPremit = menuPremit;
    }

    /**
     * 用户是否过期，可以根据用户的信息判断是否过期
     * @return
     *  false 表示用户过期，不可登陆
     *  true 可以登陆
     */
    @JsonIgnore
    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    /**
     * 用户是否锁定，可以根据用户的信息判断是否锁定
     * @return
     *  false 用户锁定，不可登陆
     *  true 没有锁定，可以登陆
     */
    @JsonIgnore
    @Override
    public boolean isAccountNonLocked() {
        return true;
    }
    /**
     * 用户密码凭证是否过期
     * @return
     *  false 表示过期，不可登陆
     *  true 没有过期，可以登陆
     */
    @JsonIgnore
    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }
    /**
     * 用户是否禁用
     * @return
     *  false 用户禁用，不可登陆
     *  true 没有禁用，可以登陆
     */
    @JsonIgnore
    @Override
    public boolean isEnabled() {
        return true;
    }

    public String getBrowser() {
        return browser;
    }

    public void setBrowser(String browser) {
        this.browser = browser;
    }

    // getter setter 方法
    public SysUser getUser() {
        return user;
    }

    public void setUser(SysUser user) {
        this.user = user;
    }

    public String getUuid() {
        return uuid;
    }

    public void setUuid(String uuid) {
        this.uuid = uuid;
    }

    public Long getLoginTime() {
        return loginTime;
    }

    public void setLoginTime(Long loginTime) {
        this.loginTime = loginTime;
    }

    public Long getExpireTime() {
        return expireTime;
    }

    public void setExpireTime(Long expireTime) {
        this.expireTime = expireTime;
    }

    public String getOs() {
        return os;
    }

    public void setOs(String os) {
        this.os = os;
    }

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }
}
